package model

import "time"

type Student struct {
	Id         int       `db:"id"`
	ClassId    int       `db:"Class_id"`
	MajorId    int       `db:"Major_id"`
	Number     int       `db:"student_number"`
	Password   string    `db:"student_password"`
	Name       string    `db:"student_name"`
	Sex        string    `db:"student_sex"`
	Age        int       `db:"student_age"`
	CreateTime time.Time `db:"create_time"`
	StringTime string    `db:"create_time"`
	Avatar     string    `db:"avatar"`
	Class      string
	Major      string
}

type Major struct {
	Id   int    `db:"id"`
	Name string `db:"major_name"`
}

type Class struct {
	Id      int    `db:"id"`
	MajorId int    `db:"major_id"`
	Name    string `db:"class_name"`
}
type Teacher struct {
	Id           int       `db:"id"`
	Name         string    `db:"teacher_name"`
	Number       int       `db:"teacher_number"`
	Password     string    `db:"teacher_password"`
	Sex          string    `db:"teacher_sex"`
	Age          int       `db:"teacher_age"`
	CreateTime   time.Time `db:"create_time"`
	Avatar       string    `db:"avatar"`
	BookingPlace string    `db:"booking_place"`
}
type Paper struct {
	Id         int       `db:"id"`
	Title      string    `db:"title"`
	Status     string    `db:"status"`
	ScoreLine  string    `db:"Score_line"`
	Score      string    `db:"Score"`
	Context    string    `db:"context"`
	CreatedBy  string    `db:"createdBy"`
	CreateTime time.Time `db:"create_time"`
	StringTime string
}
type Question struct {
	Id         int       `db:"question_id"`
	PaperId    string    `db:"Paper_id"`
	Number     string    `db:"number"`
	Question   string    `db:"question"`
	Options    string    `db:"options"`
	Score      string    `db:"score"`
	CreateTime time.Time `db:"create_time"`
	StringTime string
	Factor     string `db:"factor"`
}

type TestRecord struct {
	Id         int       `db:"id"`
	StuId      string    `db:"stu_id"`
	PaperName  string    `db:"paper_name"`
	PaperId    string    `db:"paper_id"`
	ResList    string    `db:"res_list"`
	Score      string    `db:"score"`
	CreateTime time.Time `db:"create_time"`
	StringTime string
}

type Carousel struct {
	Id         int       `db:"id"`
	Title      string    `db:"title"`
	Context    string    `db:"context"`
	Url        string    `db:"url"`
	Link       string    `db:"link"`
	CreateTime time.Time `db:"create_time"`
	StringTime string
}

type Message struct {
	Id         int    `db:"Id"`
	RoomId     string `db:"roomId"`
	Sender     string `db:"sender"`
	SenderName string `db:"senderName"`
	Recipient  string `db:"recipient"`
	Content    string `db:"content"`
	SendTime   string `db:"sendTime"`
	Type       string `db:"type"`
}

type Room struct {
	Id         int `db:"room_id"`
	Uid1       int `db:"uid1"`
	Uid2       int `db:"uid2"`
	NewMessage string
	Avatar     string
	Name       string
}

type Booking struct {
	Id          int       `db:"id"`
	StudentId   int       `db:"student_id"`
	TeacherId   int       `db:"teacher_id"`
	Place       string    `db:"place"`
	State       int       `db:"state"`
	Content     string    `db:"content"`
	BookingTime string    `db:"booking_time"`
	CreateTime  time.Time `db:"create_time"`
	StringTime  string
	StudentName string
	TeacherName string
	StateName   string
}

type ClientTeacher struct {
	Id         int    `db:"id"`
	Name       string `db:"teacher_name"`
	RoomId     int
	NewMessage string
	Avatar     string
}

type ChatGPTMessage struct {
	Role    string `json:"role"`
	Content string `json:"content"`
}

// ChatCompletionReq GPT-3 语言模型的聊天请求结构体
type ChatCompletionReq struct {
	Model       string            `json:"model"`
	Messages    []*ChatGPTMessage `json:"messages"`    //包含聊天历史记录的消息对象数组，每个消息对象包含消息的文本内容和发送者 ID。
	MaxTokens   int64             `json:"max_tokens"`  //模型生成回复的最大 token 数量。Token 是指分词后的单词或符号。
	Temperature float64           `json:"temperature"` //控制生成回复的多样性和随机性的温度参数。较高的温度会导致更随机和多样的回复。
	TopP        float64           `json:"top_p"`       //一个在生成回复时控制 token 分布的参数。它限制了生成回复所用的 token 频率总和，以保证回复的准确性。
	Stream      bool              `json:"stream"`      // 一个布尔值，表示是否使用流式 API。如果设置为 true，API 将会以流式方式返回聊天回复，否则将会一次性返回整个聊天历史记录的回复。
}

// SendMessage gpt聊天消息的结构体
type SendMessage struct {
	MsgType      string `json:"msg_type"`
	Text         string `json:"text"`
	OpenInputBox bool   `json:"open_input_box"` // 开启输入框
	OpenChatGPT  bool   `json:"open_chat_gpt"`  // 开启chatGPT
	SendTime     int64  `json:"send_time"`      // 发送时间
	GptMsgType   int    `json:"gpt_msg_type"`   // 流式类型 1、开始 2、输出 3、撤回 4、结束
	UserID       string `json:"user_id"`        // 用户id
	DialogID     int64  `json:"dialog_id"`      // 会话id
	MsgID        int64  `json:"msg_id"`         //消息id
}

// ChatCompletionsStreamResp GPT-3 语言模型聊天响应结构体
type ChatCompletionsStreamResp struct {
	ID      string          `json:"id"`
	Object  string          `json:"object"`
	Created int64           `json:"created"`
	Choices []StreamChoices `json:"choices"`
}

// StreamChoices ChatGPT 模型流式输出中每个回复的结构体
type StreamChoices struct {
	Index        int            `json:"index"`         //表示生成回复时所选的 token 索引。
	Message      ChatGPTMessage `json:"delta"`         // 一个 ChatGPTMessage 类型的对象，表示生成的聊天回复。
	FinishReason string         `json:"finish_reason"` //表示流式输出的结束原因，比如超时、生成指定数量的 token 等
}

type SCL90 struct {
	ID                       int     `db:"id" json:"id"`                                             // ID
	UserID                   string  `db:"userId" json:"userId"`                                     // 用户ID
	Somatization             float64 `db:"somatization" json:"somatization"`                         // 躯体化
	ObsessiveCompulsive      float64 `db:"obsessiveCompulsive" json:"obsessiveCompulsive"`           // 强迫症状
	InterpersonalSensitivity float64 `db:"interpersonalSensitivity" json:"interpersonalSensitivity"` // 人际关系敏感
	Depression               float64 `db:"depression" json:"depression"`                             // 抑郁
	Anxiety                  float64 `db:"anxiety" json:"anxiety"`                                   // 焦虑
	Hostile                  float64 `db:"hostile" json:"hostile"`                                   // 敌对
	Terror                   float64 `db:"terror" json:"terror"`                                     // 恐怖
	Bigotry                  float64 `db:"bigotry" json:"bigotry"`                                   // 偏执
	Psychotic                float64 `db:"psychotic" json:"psychotic"`                               // 精神病性
	Other                    float64 `db:"other" json:"other"`                                       // 其他
	Sum                      int     `db:"sum" json:"sum"`                                           // 总分
	Average                  string  `db:"average" json:"average"`                                   // 总均分
	Feminine                 int     `db:"feminine" json:"feminine"`                                 // 阴性项目
	MasculineSum             int     `db:"masculineSum" json:"masculineSum"`                         // 阳性总分
	Masculine                int     `db:"masculine" json:"masculine"`                               // 阳性项目
	MasculineAge             string  `db:"masculineAge" json:"masculineAge"`                         // 阳性症状均分
	StudentName              string
	TextId                   string
}
